#!/usr/bin/env python
#-*- coding:utf-8 -*
#
# LibKontrolcu
#  - Kontrolcu Kütüphanesi
#
# Geliştiriciler:
#  - Osman KARAGÖZ <osmank3@gmail.com>
#  - Taha Doğan Güneş <tdgunes@gmail.com>
# Belgelendirici:
#  - Okan Okuroğulları <ookurogullari@gmail.com>
#
# Web Sitesi: http://code.google.com/p/kontrolcu
# Lisansı: GPL v3 ile lisanslanmıştır.
#
# Yardım dökümanlarını http://code.google.com/p/kontrolcu/w/list 
#                                     adresinden bulabilirsiniz.


import hashlib, urllib, os
veri = []
hataveri = []
def anamotor(kontip, dosliste, arg2=0): # dosliste -> ana programda
  x = 0
  try:
    while x < len(dosliste):
      global veri, hataveri
      dosyadi = dosliste[x].split("/")[-1]
      dosya = open(dosliste[x]).read()
      a = kontip()
      a.update(dosya)
      c = a.hexdigest()
      if arg2 == 0:
        taslak = c + "  " + dosyadi
        print taslak
        veri.append(taslak)
        taslak = ""
      else:
        taslak = c + "  " + dosyadi
        veri.append(taslak)
        taslak = ""
      x = x + 1
  except IOError:
    sonuc = "Böyle bir dizin bulunamadı."
    print sonuc
    hataveri.append(sonuc)
  except TypeError:
    sonuc = "Dosya yanlış olduğundan okunamadı."
    print sonuc
    hataveri.append(sonuc)

def soru(kontip, verilen, dosliste):

  if len(kontip().hexdigest()) == 32:
    KonTipUzan = ".md5sum"
  elif len(kontip().hexdigest()) == 40:
    KonTipUzan = ".sha1sum"

  if verilen == 1:
    sonveri = veri
    soru2 = raw_input("Dosya adı giriniz : ")
    dosya = soru2 + KonTipUzan
    try:
      kayit = open(dosya, "w")
      z = -1
      while z < len(sonveri) -1:
        z = z + 1
        kayit.write(sonveri[z])
        kayit.write("\n")
      print dosya, "başarıyla kaydedildi."
    except IOError, (hata_no, hata):
      if hata_no == 13:
        print "Dosya Kaydedilemedi! Kayıt yerine yazma izniniz olmayabilir!"
  if verilen == 2:
    sonveri = veri
    dosyadi = dosliste[0].split("/")[-1]
    dosya = dosliste[0] + KonTipUzan
    try:
      kayit = open(dosya, "w")
      kayit.write(sonveri[0])
      kayit.write("\n")
      print dosyadi + KonTipUzan, "başarıyla kaydedildi."
    except IOError, (hata_no, hata):
      if hata_no == 13:
        print "Dosya Kaydedilemedi! Kayıt yerine yazma izniniz olmayabilir!"

def check(doskont):
    try:
      adres = urllib.urlopen(doskont[0])
      kont1 = adres.read().decode("utf8")
      adres.close()
      if kont1.find("was not found on this server.") != -1:
        sonuc = u"Adres bulunamadı!"
        print sonuc
        hataveri.append(sonuc)
      else:
        if kont1.find("was not found on this server.") == -1 and doskont[0][:5] == "http:" or doskont[0][:4] == "ftp:" or doskont[0][:6] == "https:":
          print "Dosya indirildi."
        kont2 = kont1.split("\n")
        print "Kontrol ediliyor..."
        n = 0
        while len(kont2)>n+1:
          kontlistesi = kont2[n].split()
          kontop = kontlistesi[0]
          if len(kontop) == 32:
            kontip=hashlib.md5
          elif len(kontop) == 40:
            kontip=hashlib.sha1
          else:
            sonuc = u"Kontrol toplamı dosyası hatalı."
            print sonuc
            hataveri.append(sonuc)
            break
          a = kontip()
          kontlistesi.pop(0)
          kontdosya = ""
          for i in kontlistesi:
            kontdosya += i
            kontdosya += " "
          kontdosya=kontdosya[:-1]
          kontdosya=kontdosya.replace("*", "")
          try:
            kdosya=file(kontdosya).read()
          except:
            try:
              if len(doskont) == 1:
                yol=os.path.split(doskont[0])[0]
                os.chdir(yol)
                kdosya=file(kontdosya).read()
                pass
              else:
                os.chdir(doskont[1])
                kdosya=file(kontdosya).read()
                pass
            except OSError, (hata_no, hata):
              sonuc = u"%s dosyası bulunamıyor."% kontdosya
              print sonuc
              hataveri.append(sonuc)
              n += 1
              continue
            except IOError, (hata_no, hata):
              sonuc = u"%s dosyası bulunamıyor.\nSilinmiş veya taşınmış olabilir. Yolu kontrol edin!"% kontdosya
              print sonuc
              hataveri.append(sonuc)
              n += 1
              continue
          a.update(kdosya)
          x = a.hexdigest() 
          if x==kontop:
            sonuc=u'Dosya: %s eskisi ile uyuşuyor.'% kontdosya
            print sonuc
            veri.append(sonuc)
          else:
            sonuc=u'Dosya: %s eskisi ile uyuşmuyor.\nDeğişikliğe uğramış ya da bozulmuş olabilir.'% kontdosya
            print sonuc
            veri.append(sonuc)
          n = n+1
    except IOError, (hata_no, hata):
      if hata_no == 2:
        sonuc = u"%s dosyası bulunamıyor!"% doskont[0]
        print sonuc
        hataveri.append(sonuc)

def ccheck(dosliste): #Unicode desteği!
  liste=dosliste
  x=0
  while len(liste)>x+1:
    try:
      dosya=liste[x]
      kontop=liste[x+1]
      if len(kontop) == 32:
        kontip=hashlib.md5
      elif len(kontop) == 40:
        kontip=hashlib.sha1
      else:
        sonuc=u"Sonuç: %s dosyasının kontrol toplamı hatalı!"% dosya
        print sonuc
        hataveri.append(sonuc)
        x=x+2
        continue
      a=kontip()
      kdosya=file(dosya).read()
      a.update(kdosya)
      dkontop=a.hexdigest()
      if dkontop==kontop:
        sonuc=u'Sonuç: %s dosyasının kontrol toplamı ile uyuşuyor.'% dosya
        print sonuc
        veri.append(sonuc)
      else:
        sonuc=u'Sonuç: %s dosyasının kontrol toplamı ile uyuşmuyor.\nDeğişikliğe uğramış ya da bozulmuş olabilir.'% dosya
        print sonuc
        veri.append(sonuc)
      x=x+2

    except IOError, (hata_no, hata):
      if hata_no == 2:
        sonuc = 'Dosya: %s bulunamadı.'% dosya
        print sonuc
        hataveri.append(sonuc)
        x=x+2
        pass
